package com.itlong.cloud.property.dao;

import com.itlong.cloud.POJO.PO.PropertyCloudServiceCostMessageInfoPO;
import com.itlong.cloud.POJO.VO.operate.OperateBusinessChargeVO;
import com.itlong.cloud.POJO.VO.property.PropertyCloudServiceCostMessageVO;
import com.itlong.cloud.POJO.VO.property.PropertyCloudServiceCostOrderDataVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Map;

/**
 * <desc>
 *     物业—云服务费消息通知数据访问接口。
 * <desc/>
 *
 * @createDate 2019/08/07.
 */
@Mapper
@Repository
public interface IPropertyCloudServiceCostMessageDao {

    /**
      * <desc>
      *      获取云服务费消息推送列表。
      * <desc/>
      *
      * @param params
      * @return  返回推送消息列表
     * @author Juguang.S
     * @createDate 2019-08-07
      */
    List<PropertyCloudServiceCostMessageVO> getMessageByPage(Map<String, Object> params);

     /**
      * <desc>
      *      获取云服务费总记录数。
      * <desc/>
      *
      * @param params
      * @return 总记录数
      * @author Juguang.S
      * @createDate 2019-08-07
      */
    Integer getMessageByPageCount(Map<String, Object> params);

    /**
     * <desc>
     *      获取云服务费消息的详细信息。
     * <desc/>
     *
     * @param  messageId 消息ID
     * @param  loginUserId 用户ID
     * @return
     * @author Juguang.S
     * @createDate 2019-08-07
     */
    PropertyCloudServiceCostMessageVO getMessageInfo(@Param("messageId") String messageId,@Param("loginUserId") String loginUserId);

    /**
     * <desc>
     *      修改云服务费消息的状态。
     * <desc/>
     *
     * @param  params 参数
     * @return
     * @author Juguang.S
     * @createDate 2019-08-07
     */
    void updateMessageInfo(Map<String, Object> params);

    /**
     * <desc>
     *      获取项目未支付云服务费过期时间信息。
     * <desc/>
     *
     * @return
     * @author Juguang.S
     * @createDate 2019-08-07
     */
    List<OperateBusinessChargeVO> getProjectCloudServiceEndTimeInfo();

    /**
     * <desc>
     *      获取多条复用至新批次号并且未支付的情况。
     * <desc/>
     *
     * @return
     * @author Juguang.S
     * @createDate 2019-08-07
     */
    List<OperateBusinessChargeVO> getProjectCloudServiceEndTimeInfoBySome();

    /**
     * <desc>
     *      未支付过期时间取旧批次号过期时间最早的一条已支付的过期时间进行计算 针对有多条复用的情况。
     * <desc/>
     *
     * @param oldBatchNumber
     * @return  返回过期时间
     * @author Juguang.S
     * @createDate 2019-11-22
     */
    String getCloudServiceCostEndTimeBySome(@Param("oldBatchNumber") String[] oldBatchNumber);

    /**
     * <desc>
     *       批量保存单元信息.
     * </desc>
     *
     * @param params 待保存的物业云服务消息信息
     * @return 受影响的行数
     * @author Juguang.S
     * @createDate 2019-08-08
     */
    Integer batchSave(List<Map<String,Object>> params);

    /**
     * <desc>
     *       获取发送短信所需信息.
     * </desc>
     *
     * @param projectId 项目编号
     * @return 查询发送短信所需信息的结果集
     * @author Juguang.S
     * @createDate 2019-08-08
     */
    Map<String,String> getSendMessageInfo(String projectId);

    /**
     * <desc>
     *       根据OrderId查询其明细.
     * </desc>
     *
     * @param orderId 订单id
     * @return
     * @author Juguang.S
     * @createDate 2019-11-26
     */
    List<PropertyCloudServiceCostOrderDataVO> getOrderDataInfo(String orderId);

    /**
     * <desc>
     *       根据批次号查询其上次缴费金额.
     * </desc>
     *
     * @param batchNumber 批次号
     * @return
     * @author Juguang.S
     * @createDate 2019-11-27
     */
    String getLastAmountbyBatchNumber(String batchNumber);


    /**
     * <desc>
     *      获取批次号是否有未支付已被商务审核过的订单
     * <desc/>
     *
     * @return
     * @author Juguang.S
     * @createDate 2019-12-04
     */
    String getIsExistNotPaymentOrderId(String batchNumber);

    /**
     * <desc>
     *      查询所有的项目编号.
     * </desc>
     *
     * @param
     * @return
     * @author Juguang.S
     * @createDate 2020-02-27
     */
    List<String> getAllProjectId();

    /**
     * <desc>
     *      获取项目下最近批次号过期时间。
     * <desc/>
     *
     * @param  projectId 项目编号
     * @return
     * @author Juguang.S
     * @createDate 2020/02/20
     */
    String getBatchNumberEndTimeByProjectId(@Param("projectId") String projectId,@Param("oldBatchNumberArr") List<String> oldBatchNumberArr);

    /**
     * <desc>
     *      获取项目下合并复用的旧批次号。
     * <desc/>
     *
     * @param  projectId 项目编号
     * @return
     * @author Juguang.S
     * @createDate 2020/02/20
     */
    List<String> getOldBatchNumberByProjectId(@Param("projectId") String projectId);

    /**
     * <desc>
     *      获取项目下的云对讲设备信息
     * <desc/>
     *
     * @param  projectId   项目编号
     * @return
     * @author Juguang.S
     * @createDate 2020/02/21
     */
    List<Map<String,String>> getCloudTalkInfoByProjectId(@Param("projectId") String projectId);

    /**
     * <desc>
     *      获取项目下待审核用户数量
     * </desc>
     *
     * @param projectId 项目id
     * @return
     * @Author Zhu.yj
     * @createDate  2021/4/28
     */
    Integer getProjectCheckCount(@Param("projectId") String projectId);

    /**
     * <desc>
     *      获取消息类型
     * </desc>
     *
     * @param messageId 消息id
     * @return
     * @Author Zhu.yj
     * @createDate  2021/4/28
     */
    PropertyCloudServiceCostMessageInfoPO getMessageType(@Param("messageId") String messageId);

}
